﻿namespace PolymorphismApplication;

internal class Shape
{
    protected int width, height;

    public Shape(int a = 0, int b = 0)
    {
        width = a;
        height = b;
    }

    public virtual int area()
    {
        Console.WriteLine("父类的面积：");
        return 0;
    }
}

internal class Rectangle : Shape
{
    public Rectangle(int a = 0, int b = 0) : base(a, b)
    {
    }

    public override int area()
    {
        Console.WriteLine("Rectangle 类的面积：");
        return width * height;
    }
}

internal class Triangle : Shape
{
    public Triangle(int a = 0, int b = 0) : base(a, b)
    {
    }

    public override int area()
    {
        Console.WriteLine("Triangle 类的面积：");
        return width * height / 2;
    }
}

internal class Caller
{
    public void CallArea(Shape sh)
    {
        int a;
        a = sh.area();
        Console.WriteLine("面积： {0}", a);
    }
}

class Tester
{
    public static void Test1()
    {
        var c = new Caller();
        var r = new Rectangle(10, 7);
        var t = new Triangle(10, 5);
        c.CallArea(r);
        c.CallArea(t);
        // Console.ReadKey();
    }
}